import router from './router'
import store from '@/store'
import { PER_CODE_PAGE_MAP } from '@/const/perCockpitPage'

router.beforeEach(async(to, from, next) => {
  // start progress bar
  // NProgress.start()
  // if (process.env.NODE_ENV !== "production") {
  //     next();
  //     return;
  // }

  // 不需要权限的页面（二级页面）直接进入
  const perList = []
  for (const key in PER_CODE_PAGE_MAP) {
    perList.push(PER_CODE_PAGE_MAP[key].path)
  }
  if (!perList.includes(to.path)) {
    next()
    return
  }

  const pageJumpHandle = (perPathList) => {
    // 拥有当前需要进入的页面权限直接进入
    if (perPathList.includes(to.path)) {
      next()
      return
    }
    // 无当前需要进入的页面权限时，进入第一个拥有权限的页面
    next({
      path: perPathList[0],
      replace: true
    })
  }

  if (store.getters.perPathList.length) {
    pageJumpHandle(store.getters.perPathList)
    return
  }

  store
    .dispatch('getUserAllPagePer')
    .then((perCodeList) => {
      const pagePathList = [] // 拥有权限页面的path列表
      const pageRouteList = [] // 拥有权限页面的导航列表（用于浮动导航栏）
      // 遍历页面权限编码列表，通过本地配置的映射关系，获取对应的页面的路由
      perCodeList.forEach((item) => {
        if (PER_CODE_PAGE_MAP[item]) {
          pagePathList.push(PER_CODE_PAGE_MAP[item].path)
          pageRouteList.push(PER_CODE_PAGE_MAP[item])
        }
      })
      if (pagePathList.length) {
        store.commit('updatePerPathList', pagePathList)
        store.commit('updateNavPerList', pageRouteList)
        pageJumpHandle(pagePathList)
        return
      }
      // 无页面权限
      next({
        path: '/noAccess',
        query: { msg: '错误' },
        replace: true
      })
    })
    .catch((error) => {
      // 无权限
      next({
        path: '/noAccess',
        query: {
          msg: error
        },
        replace: true
      })
    })
})

router.afterEach(() => {
  // finish
})
